From 5b7ccf0b671e2999b62befc729a3e517a0433728 Mon Sep 17 00:00:00 2001
From: Bertrand Yuan <bert.yuan@outlook.com>
Date: Mon, 15 Dec 2025 23:48:10 +0800
Subject: initial commit -- the front-end prototype

The initial code is base on Anirudh's work.

More to see at:

    https://github.com/techwithanirudh/shadcn-blog

Therefore, the code in this commit is under MIT license.
---
 src/app/og/[...slug]/route.tsx | 58 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 src/app/og/[...slug]/route.tsx

(limited to 'src/app/og/[...slug]/route.tsx')

diff --git a/src/app/og/[...slug]/route.tsx b/src/app/og/[...slug]/route.tsx
new file mode 100644
index 0000000..8738616
--- /dev/null
+++ b/src/app/og/[...slug]/route.tsx
@@ -0,0 +1,58 @@
+import { generateOGImage } from '@/app/og/[...slug]/og';
+import { metadataImage } from '@/lib/metadata-image';
+import type { ImageResponse } from 'next/og';
+
+async function loadAssets(): Promise<
+  { name: string; data: Buffer; weight: 400 | 600; style: 'normal' }[]
+> {
+  const [
+    { base64Font: normal },
+    { base64Font: mono },
+    { base64Font: semibold },
+  ] = await Promise.all([
+    import('./fonts/geist-regular-otf.json').then((mod) => mod.default || mod),
+    import('./fonts/geistmono-regular-otf.json').then(
+      (mod) => mod.default || mod,
+    ),
+    import('./fonts/geist-semibold-otf.json').then((mod) => mod.default || mod),
+  ]);
+
+  return [
+    {
+      name: 'Geist',
+      data: Buffer.from(normal, 'base64'),
+      weight: 400 as const,
+      style: 'normal' as const,
+    },
+    {
+      name: 'Geist Mono',
+      data: Buffer.from(mono, 'base64'),
+      weight: 400 as const,
+      style: 'normal' as const,
+    },
+    {
+      name: 'Geist',
+      data: Buffer.from(semibold, 'base64'),
+      weight: 600 as const,
+      style: 'normal' as const,
+    },
+  ];
+}
+
+export const GET = metadataImage.createAPI(
+  async (page): Promise<ImageResponse> => {
+    const [fonts] = await Promise.all([loadAssets()]);
+
+    return generateOGImage({
+      title: page.data.title,
+      description: page.data.description,
+      fonts,
+    });
+  },
+);
+
+export function generateStaticParams(): {
+  slug: string[];
+}[] {
+  return metadataImage.generateParams();
+}
-- 
cgit v1.2.3

